home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / doors_2 / twview91.zip / GSDATA.INC < prev    next >
Text File  |  1992-03-11  |  9KB  |  311 lines

  1. {GSDATA.INC}
  2. const
  3.   SectorFieldMarker = 'Sector data starts here...';
  4.   
  5. procedure writeSectors( var g : text; var ss : SectorArray );
  6. var
  7.   s : sector;
  8.   i : 0..maxWarps;
  9. begin
  10.   writeln( g, SectorFieldMarker);
  11.   for s := 1 to maxSector do
  12.     with ss[s] do
  13.       if (number <> Unexplored) or (PortType <> NotAPort) or (etc <> Nothing) then
  14.       begin
  15.         write( g, s : 5, number:3 );
  16.         for i := 1 to number do
  17.           write( g, data[i] : 5);
  18.         write( g, portType : 3 );
  19.         write( g, etc : 6 );
  20.         writeln( g );
  21.       end; {for if}
  22. end; {writeSectors}
  23.  
  24. procedure WriteDock( var g : text; d : integer );
  25. begin
  26.   writeln( g, 'SpaceDock is ', d : 5 );
  27. end;
  28.  
  29. procedure WriteNotes( var g : text; var n : NoteList );
  30. var
  31.   i : 1..MaxNote;
  32. begin
  33.   writeln( g, n.top, '  <- number of notes' );
  34.   if n.top > 0 then
  35.     for i := 1 to n.top do
  36.       writeln( g, n.data[ i ].reference : 5, ' ', n.data[i].info );
  37. end; {WriteNotes}
  38.  
  39. procedure WritePorts( var g : text; var p : PortList );
  40. var
  41.   i : 1..MaxPorts;
  42. begin
  43.   writeln( g, p.top, '  <- number of Port Infos' );
  44.   if p.top > 0 then
  45.     for i := 1 to p.top do
  46.       with p.data[i] do
  47.         writeln( g, where : 5, amts[ Fuel ] : 8, amts[ Organics ] : 8, 
  48.                  amts[ Equipment ] : 8, usage[ Fuel ] : 4,
  49.                  usage[ Organics ] : 4, usage[ Equipment ] : 4, ' ',
  50.                  change[ Fuel ] : 5, ' ', change[ Organics ] : 5,
  51.                  ' ', change[ Equipment ] : 5 );
  52. end; {WritePorts}
  53.  
  54. const
  55.  DataFileIdentifier = '::Tradewars Data file::';
  56.  
  57. procedure SaveData( var g : text; var Space : TheVoid );
  58. begin
  59.   writeln(g, DataFileIdentifier );
  60.   writeDock( g, Space.dock );
  61.   writeNotes( g, Space.notes );
  62.   writePorts( g, space.ports );
  63.   writeSectors( g, space.sectors );
  64.   close( g );
  65. end; {SaveData}
  66.  
  67. procedure InitSectors( var s : SectorArray );
  68. var
  69.   r : sector;
  70. begin
  71.   for r := 1 to maxSector do
  72.     with s[r] do
  73.       begin
  74.         number  := UnExplored;
  75.         portType:= NotAPort;
  76.         etc     := Nothing;
  77.       end; {for with}
  78. end; {Init Sectors}
  79.  
  80.  
  81. function bval( line : string; var n : integer) : boolean;
  82. { convert  nonnegative numeric value at front of line into n; return whether
  83. conversion was successful. }
  84. var
  85.   i : integer;
  86.   error : boolean;
  87.  
  88. begin
  89.   i := 1;
  90.   n := 0;
  91.   Error := true;
  92.   while ( i <= length( line ) ) do
  93.     if line[i] = ' ' then
  94.       i := i + 1
  95.     else if line[ i ] in ['0'..'9'] then
  96.       begin
  97.         Error := false;
  98.         n := 10 * n + ord( line[ i ] ) - ord('0');
  99.         i := i + 1;
  100.       end
  101.     else
  102.       i := length( line ) + 1;
  103.   bval := error;
  104. end;
  105.  
  106. procedure InitPorts( var p : portList );
  107. const
  108.   empty  : goodsArray = ( 0, 0, 0 );
  109. var
  110.   i : portIndex;
  111. begin
  112.   p.top := 0;
  113.   for i := 1 to MaxPorts do
  114.     p.data[i].amts := empty;
  115. end;
  116.  
  117. procedure InitSpace( var s : TheVoid );
  118. begin
  119.   s.dock  := 0;
  120.   s.notes.top := 0;
  121.   InitPorts( s.ports );
  122.   InitSectors( s.sectors );
  123. end;
  124.  
  125. procedure ReadSectors( var h : text; var ss : SectorArray );
  126. var
  127.   r : sector;
  128.   i : 0..maxSector;
  129.   temp,
  130.   portcount,
  131.   sectorcount :integer;
  132.   line : string;
  133. begin
  134.   portcount := 0; sectorcount := 0;
  135.   readln( h, line);   { "Sector data starts here..." }
  136.   if line <> SectorFieldMarker then
  137.     writeln('Sector data missing?  Found ', line )
  138.   else
  139.     while not eof( h ) do
  140.       begin
  141.         read( h, r );
  142.         sectorcount := sectorcount + 1;
  143.         with ss[r] do
  144.           begin
  145.             read( h, number );
  146.             for i := 1 to number do
  147.               begin
  148.                 read( h, temp );
  149.                 if (temp >= 1) and (temp <= maxSector) then
  150.                   data[ i ] := temp
  151.                 else
  152.                   writeln('bad data for sector ', r);
  153.               end; {for}
  154.             read( h, portType );
  155.             if PortType <> NotAPort then
  156.               portcount := portcount + 1;
  157.             read( h, etc );
  158.           end; {with}
  159.         readln( h );
  160.       end; {while}
  161.   writeln('Finished reading ', sectorcount, ' sectors, ', portcount, ' ports.');
  162. end; {ReadSectors}
  163.  
  164. procedure ReadDock( var f : text; var d : SectorIndex );
  165. begin
  166.   if d = 0 then
  167.     begin
  168.       skip( f, 12);    { "SpaceDock is" }
  169.       readln( f, d );
  170.       if d = 0 then
  171.         writeln('Space Dock location unknown')
  172.       else
  173.         writeln('Space Dock location ', d );
  174.     end
  175.   else  {already known, just skip line}
  176.     readln( f );
  177. end; {ReadDock}
  178.  
  179. procedure ReadNotes( var f : text; var sn : NoteList );
  180. var
  181.   NoteIndex,
  182.   i : 0..MaxNote;
  183.   more,
  184.   j : integer;
  185.   n : string;
  186. begin
  187.   readln( f, more );
  188.   if more > 0 then
  189.     for i := 1 to more do
  190.       begin
  191.         readln( f, n );
  192.         if not bval( copy( n, 1, 5 ), j ) then
  193.           begin
  194.             NoteIndex := NoteNumber( j );         { is this note new? }
  195.             if NoteIndex = 0 then                 { yes, so add to    }
  196.               if sn.top = MaxNote then
  197.                 writeln('Too many notes.  Can''t record information')
  198.               else
  199.                 begin                             { # notes, and work }
  200.                   sn.top := sn.top + 1;           { with that entry   }
  201.                   NoteIndex := sn.top;
  202.                 end; {if}
  203.             with sn.data[ NoteIndex ] do          { then store it     }
  204.               begin
  205.                 reference := j;
  206.                 info := copy( n, 7, NoteSize);
  207.               end {with}
  208.           end {if}
  209.         else
  210.           writeln('Error with note ', n );
  211.       end; {for}
  212.   writeln('Info for ', sn.top, ' notes ');
  213. end; {ReadNotes}
  214.  
  215. procedure ReadPorts( var f : text; var sp : PortList );
  216. const
  217.   debug = false;
  218. var
  219.   p, i : 0..MaxPorts;
  220.   location : sector;
  221.   more : integer;
  222. begin
  223.   readln( f, more );
  224.   if debug then write('Should get ', more, ' ports.');
  225.   if debug then writeln('Top currently ', sp.top );
  226.   if more > 0 then
  227.     for i := 1 to more do
  228.       begin
  229.         read( f, location );
  230.         p := portnumber( location );
  231.         if debug then write( location : 5, ' to ', p : 3 );
  232.         if p = 0 then
  233.           begin
  234.             sp.top := sp.top + 1;
  235.             p := sp.top;
  236.             if debug then write (' => ', p : 3, ' ');
  237.           end; {if}
  238.         sp.data[p].where := location;
  239.         with sp.data[ p ] do
  240.           begin
  241.             read( f, amts[ Fuel ], amts[ Organics ], amts[ Equipment ]);
  242.             if not eoln( f ) then
  243.                read( f, usage[Fuel], usage[Organics], usage[Equipment] )
  244.             else
  245.               begin
  246.                 usage[fuel] := 0;
  247.                 usage[organics] := 0;
  248.                 usage[equipment] := 0;
  249.               end;
  250.             if not eoln( f ) then
  251.               read( f, change[Fuel], change[Organics], change[Equipment] )
  252.             else
  253.               begin
  254.                 change[Fuel] := amts[Fuel];
  255.                 change[Organics] := amts[Organics];
  256.                 change[Equipment] := amts[Equipment];
  257.               end;
  258.             readln( f );
  259.           end; {with}
  260.       end; {if for}
  261.   writeln('Info for ', sp.top, ' ports');
  262. end; {ReadPorts}
  263.  
  264. procedure GetData( var space : TheVoid; var name : string );
  265. var
  266.   h : text;
  267.   line,
  268.   filename : string;
  269. begin
  270.   if name = '' then
  271.     begin
  272.       writeln('Hit carriage return if data base hasn''t been generated yet.');
  273.       write('Name of data file?  ');
  274.       readln( filename );
  275.     end {if}
  276.   else
  277.     filename := name;
  278.   if filename = '' then
  279.     writeln('Okay, initializing with empty space.')
  280.   else
  281.     begin
  282.       assign( h, filename );
  283. {$I-}
  284.       reset( h );
  285. {$I+}
  286.       if ioresult <> 0 then
  287.         begin
  288.           writeln('Sorry, there seems to be a problem finding the file ', filename );
  289.           writeln('Does it really exist?  Have you misspelled it?  Wrong default directory?');
  290.           writeln('Anyway, I''m not sure where to go from here, so I''m giving up.');
  291.           writeln('Sorry about that, but hey, if you can''t control your files...');
  292.           halt;
  293.         end; {if}
  294.       if pos( '.', filename) <> 0 then
  295.         name := copy( filename, 1, pos( '.', filename) - 1 )
  296.       else
  297.         name := '';
  298.       readln( h, line );
  299.       if line <> DataFileIdentifier then
  300.         begin
  301.           writeln('This is not a trade wars database file!');
  302.           halt;
  303.         end; {Error}
  304.       ReadDock( h, Space.dock );
  305.       ReadNotes( h, Space.notes );
  306.       ReadPorts( h, space.ports );
  307.       ReadSectors( h, space.sectors );
  308.       close( h );
  309.     end; {if filename <> '' }
  310. end; {GetData}
  311.